package com.bart.b_oo

/**
  * Created by BartG on 2018/10/8.
  * 1. 如果特质中方法没有实现的话，子类实现的时候不需要强制添加override关键字
  * 2. 如果特质中的某个方法已经有了实现的话子类重写的时候必须添加override关键字
  */
object ScalaTraitImpl extends ScalaTrait {

  // 实现一个接口的抽象方法
  override def hello(name: String) = {
    println(s"hello [ $name ]")
  }


  // 重写一个已经实现的方法
  override def smell(name: String): Unit = {
    print(s"对 [ $name ] 哈哈大笑")
  }

  def main(args: Array[String]): Unit = {
//    ScalaTraitImpl.hello("sweet")
//    ScalaTraitImpl.smell("小木")

    // 混入模式，相当于java的多继承和匿名内部类
    val duck = new Duck with Fly with Jump
    duck.fly("小池塘")
    duck.jump("小石凳")

  }


}

class Duck {

}

/**
  * 飞翔的接口
  */
trait Fly {

  def fly(name: String) = {
    println(s"飞到 [ $name ] 上空")
  }
}

/**
  * 跳跃的接口
  */
trait Jump {
  def jump(name: String) = {
    println(s"跳到 [ $name ] 上面")
  }
}